/**
 * @Author: harae Feng 
 * @Date: 2018-04-09 15:11:34 
 * @Last Modified by: harae Feng
 * @Last Modified time: 2018-04-09 17:13:36
 * @Description 鼠标滚动操作
 */

/**************************************
 * 兼容性差异
 * 滚轮事件的差异分为：FireFox和其他
 * IE6+ 使用的是 onmousewheel
 * FireFox 使用的是 DOMMouseScroll
 * 
 * 添加事件差异
 * IE/Opera 使用attachEvent
 * FireFox 使用addEventListener
 * 除FireFox外（包括IE/Opera） 都可用HTML DOM方式添加
 * 
 * //注册事件
 * if(document.addEventListener){
 *    document.addEventListener('DOMMouseScroll',scrollFunc,false);
 * }//W3C
 * window.onmousewheel=document.onmousewheel=scrollFunc;//IE/Opera/Chrome
 * 
 * 判断滚轮上下也有兼容性
 * 现在五大浏览器（IE、Opera、Safari、Firefox、Chrome）中Firefox 使用detail，其余四类使用wheelDelta；
 * 两者只在取值上不一致，代表含义一致，detail与wheelDelta只各取两个 值，detail只取±3，wheelDelta只取±120，
 * 其中正数表示为向上，负数表示向下
 * 
 * 参考：
 * http://www.zhangxinxu.com/wordpress/2013/04/js-mousewheel-dommousescroll-event/
 * https://www.cnblogs.com/ysx215/p/7002338.html
 **************************************/
window.mousewheel = (function(window, undefined) {        
    var _eventCompat = function(event) {
        var type = event.type;
        if (type == 'DOMMouseScroll' || type == 'mousewheel') {
            event.delta = (event.wheelDelta) ? event.wheelDelta / 120 : -(event.detail || 0) / 3;
        }
        if (event.srcElement && !event.target) {
            event.target = event.srcElement;    
        }
        if (!event.preventDefault && event.returnValue !== undefined) {
            event.preventDefault = function() {
                event.returnValue = false;
            };
        }
        /* ......其他一些兼容性处理 */
        return event;
    };
    if (window.addEventListener) {
        return function(el, fn, capture) {
            var type = 'mousewheel'
            if (document.mozFullScreen !== undefined) {
                type = "DOMMouseScroll";
            }
            el.addEventListener(type, function(event) {
                fn.call(this, _eventCompat(event));
            }, capture || false);
        }
    } else if (window.attachEvent) {
        return function(el, fn, capture) {
            el.attachEvent("onmousewheel", function(event) {
                event = event || window.event;
                fn.call(el, _eventCompat(event));    
            });
        }
    }
    return function() {};    
})(window);

 /** 
  * Example:
  *  mousewheel(document, function(event) {
  *     if (event.wheelDelta < 0) { alert("鼠标向上滚了！"); }
  *  });
  */
 